﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using WBGModel;
using System.Data;

namespace WBGDal
{
    public class DalConsulta : ICRUD
    {
        public List<ModelConsulta> Listar()
        {
            return Listar("");
        }

        public List<ModelConsulta> Listar(string filtro)
        {
            String cmd = "SELECT Consulta.*, Paciente=Pessoa.nome FROM Consulta, Paciente, Pessoa WHERE Paciente.idPaciente=Consulta.idPaciente AND Paciente.idPessoa=Pessoa.idPessoa" + (filtro.CompareTo("") == 0 ? "" : " AND " + filtro);
            return ConvertToList(UtilBanco.ExecComRetorno(cmd));
        }

        private List<ModelConsulta> ConvertToList(DataTable resultSet)
        {
            List<ModelConsulta> lst = new List<ModelConsulta>();
            for (int i = 0; i < resultSet.Rows.Count; i++)
            {
                DataRow dr = resultSet.Rows[i];
                ModelConsulta consulta = new ModelConsulta();
                consulta.idConsulta = Convert.ToInt32(dr["idConsulta"]);
                consulta.idPaciente = Convert.ToInt32(dr["idPaciente"]);
                consulta.observacao = dr["observacao"].ToString();
                consulta.Paciente = dr["Paciente"].ToString();

                if (dr["inicio"] == DBNull.Value)
                    consulta.inicio = null;
                else
                    consulta.inicio = Convert.ToDateTime(dr["inicio"]);

                if (dr["fim"] == DBNull.Value)
                    consulta.fim = null;
                else
                    consulta.fim = Convert.ToDateTime(dr["fim"]);

                if (dr["inicioPrevisto"] == DBNull.Value)
                    consulta.inicioPrevisto = null;
                else
                    consulta.inicioPrevisto = Convert.ToDateTime(dr["inicioPrevisto"]);

                if (dr["fimPrevisto"] == DBNull.Value)
                    consulta.fimPrevisto = null;
                else
                    consulta.fimPrevisto = Convert.ToDateTime(dr["fimPrevisto"]);

                lst.Add(consulta);
            }
            return lst;
        }

        public void Inserir(ModelConsulta obj)
        {
            String cmd = String.Format("INSERT INTO Consulta (idPaciente,inicio,fim,inicioPrevisto,fimPrevisto,observacao) VALUES ('{0}',{1},{2},{3},{4},'{5}')", obj.idPaciente, UtilBanco.ValorOuNulo(obj.inicio), UtilBanco.ValorOuNulo(obj.fim), UtilBanco.ValorOuNulo(obj.inicioPrevisto), UtilBanco.ValorOuNulo(obj.fimPrevisto), obj.observacao);
            UtilBanco.ExecSemRetorno(cmd);
        }

        public void Alterar(ModelConsulta obj)
        {
            string cmd = String.Format("UPDATE Consulta SET idPaciente='{0}', inicio={1}, fim={2}, inicioPrevisto={3}, fimPrevisto={4}, observacao='{5}' WHERE idConsulta={6}", obj.idPaciente, UtilBanco.ValorOuNulo(obj.inicio), UtilBanco.ValorOuNulo(obj.fim), UtilBanco.ValorOuNulo(obj.inicioPrevisto), UtilBanco.ValorOuNulo(obj.fimPrevisto), obj.observacao, obj.idConsulta);
            UtilBanco.ExecSemRetorno(cmd);
        }

        public void Deletar(int id)
        {
            String cmd = String.Format("DELETE FROM Consulta WHERE idConsulta={0}", id);
            UtilBanco.ExecSemRetorno(cmd);
        }
    }
}
